!function (t, e) {
    "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.imageConversion = e() : t.imageConversion = e()
}(this, (function () {
    return function (t) {
        var e = {};
        function n(r) {
            if (e[r])
                return e[r].exports;
            var o = e[r] = {
                i: r,
                l: !1,
                exports: {}
            };
            return t[r].call(o.exports, o, o.exports, n), o.l = !0, o.exports
        }
        return n.m = t, n.c = e, n.d = function (t, e, r) {
            n.o(t, e) || Object.defineProperty(t, e, {
                enumerable: !0,
                get: r
            })
        }, n.r = function (t) {
            "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
                value: "Module"
            }),
                Object.defineProperty(t, "__esModule", {
                    value: !0
                })
        }, n.t = function (t, e) {
            if (1 & e && (t = n(t)), 8 & e)
                return t;
            if (4 & e && "object" == typeof t && t && t.__esModule)
                return t;
            var r = Object.create(null);
            if (n.r(r), Object.defineProperty(r, "default", {
                enumerable: !0,
                value: t
            }), 2 & e && "string" != typeof t)
                for (var o in t)
                    n.d(r, o, function (e) {
                        return t[e]
                    }.bind(null, o));
            return r
        }, n.n = function (t) {
            var e = t && t.__esModule ? function () {
                return t.default
            } : function () {
                return t
            };
            return n.d(e, "a", e), e
        }, n.o = function (t, e) {
            return Object.prototype.hasOwnProperty.call(t, e)
        }, n.p = "", n(n.s = 0)
    }([function (t, e, n) {
        "use strict";
        var r;
        function o(t) {
            return ["image/png", "image/jpeg", "image/gif"].some(e => e === t)
        }
        n.r(e),
            n.d(e, "canvastoDataURL", (function () {
                return a
            })),
            n.d(e, "canvastoFile", (function () {
                return c
            })),
            n.d(e, "dataURLtoFile", (function () {
                return s
            })),
            n.d(e, "dataURLtoImage", (function () {
                return l
            })),
            n.d(e, "downloadFile", (function () {
                return d
            })),
            n.d(e, "filetoDataURL", (function () {
                return f
            })),
            n.d(e, "imagetoCanvas", (function () {
                return g
            })),
            n.d(e, "urltoBlob", (function () {
                return w
            })),
            n.d(e, "urltoImage", (function () {
                return m
            })),
            n.d(e, "compress", (function () {
                return p
            })),
            n.d(e, "compressAccurately", (function () {
                return b
            })),
            n.d(e, "EImageType", (function () {
                return r
            })),
            function (t) {
                t.PNG = "image/png",
                    t.JPEG = "image/jpeg",
                    t.GIF = "image/gif"
            }(r || (r = {}));
        var i = function (t, e, n, r) {
            return new (n || (n = Promise))((function (o, i) {
                function a(t) {
                    try {
                        u(r.next(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function c(t) {
                    try {
                        u(r.throw(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function u(t) {
                    var e;
                    t.done ? o(t.value) : (e = t.value, e instanceof n ? e : new n((function (t) {
                        t(e)
                    }))).then(a, c)
                }
                u((r = r.apply(t, e || [])).next())
            }))
        };
        function a(t, e = .92, n = r.JPEG) {
            return i(this, void 0, void 0, (function* () {
                return o(n) || (n = r.JPEG), t.toDataURL(n, e)
            }))
        }
        function c(t, e = .92, n = r.JPEG) {
            return new Promise(r => t.toBlob(t => r(t), n, e))
        }
        var u = function (t, e, n, r) {
            return new (n || (n = Promise))((function (o, i) {
                function a(t) {
                    try {
                        u(r.next(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function c(t) {
                    try {
                        u(r.throw(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function u(t) {
                    var e;
                    t.done ? o(t.value) : (e = t.value, e instanceof n ? e : new n((function (t) {
                        t(e)
                    }))).then(a, c)
                }
                u((r = r.apply(t, e || [])).next())
            }))
        };
        function s(t, e) {
            return u(this, void 0, void 0, (function* () {
                const n = t.split(",");
                let r = n[0].match(/:(.*?);/)[1];
                const i = atob(n[1]);
                let a = i.length;
                const c = new Uint8Array(a);
                for (; a--;)
                    c[a] = i.charCodeAt(a);
                return o(e) && (r = e), new Blob([c], {
                    type: r
                })
            }))
        }
        function l(t) {
            return new Promise((e, n) => {
                const r = new Image;
                r.onload = () => e(r),
                    r.onerror = () => n(new Error("dataURLtoImage(): dataURL is illegal")),
                    r.src = t
            })
        }
        function d(t, e) {
            const n = document.createElement("a");
            n.href = window.URL.createObjectURL(t),
                n.download = e || Date.now().toString(36),
                document.body.appendChild(n);
            const r = document.createEvent("MouseEvents");
            r.initEvent("click", !1, !1),
                n.dispatchEvent(r),
                document.body.removeChild(n)
        }
        function f(t) {
            return new Promise(e => {
                const n = new FileReader;
                n.onloadend = t => e(t.target.result),
                    n.readAsDataURL(t)
            })
        }
        var h = function (t, e, n, r) {
            return new (n || (n = Promise))((function (o, i) {
                function a(t) {
                    try {
                        u(r.next(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function c(t) {
                    try {
                        u(r.throw(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function u(t) {
                    var e;
                    t.done ? o(t.value) : (e = t.value, e instanceof n ? e : new n((function (t) {
                        t(e)
                    }))).then(a, c)
                }
                u((r = r.apply(t, e || [])).next())
            }))
        };
        function g(t, e = {}) {
            return h(this, void 0, void 0, (function* () {
                const n = Object.assign({}, e),
                    r = document.createElement("canvas"),
                    o = r.getContext("2d");
                let i,
                    a;
                for (const t in n)
                    Object.prototype.hasOwnProperty.call(n, t) && (n[t] = Number(n[t]));
                if (n.scale) {
                    const e = n.scale > 0 && n.scale < 10 ? n.scale : 1;
                    a = t.width * e,
                        i = t.height * e
                } else
                    a = n.width || n.height * t.width / t.height || t.width,
                        i = n.height || n.width * t.height / t.width || t.height;
                switch ([5, 6, 7, 8].some(t => t === n.orientation) ? (r.height = a, r.width = i) : (r.height = i, r.width = a), n.orientation) {
                    case 3:
                        o.rotate(180 * Math.PI / 180),
                            o.drawImage(t, -r.width, -r.height, r.width, r.height);
                        break;
                    case 6:
                        o.rotate(90 * Math.PI / 180),
                            o.drawImage(t, 0, -r.width, r.height, r.width);
                        break;
                    case 8:
                        o.rotate(270 * Math.PI / 180),
                            o.drawImage(t, -r.height, 0, r.height, r.width);
                        break;
                    case 2:
                        o.translate(r.width, 0),
                            o.scale(-1, 1),
                            o.drawImage(t, 0, 0, r.width, r.height);
                        break;
                    case 4:
                        o.translate(r.width, 0),
                            o.scale(-1, 1),
                            o.rotate(180 * Math.PI / 180),
                            o.drawImage(t, -r.width, -r.height, r.width, r.height);
                        break;
                    case 5:
                        o.translate(r.width, 0),
                            o.scale(-1, 1),
                            o.rotate(90 * Math.PI / 180),
                            o.drawImage(t, 0, -r.width, r.height, r.width);
                        break;
                    case 7:
                        o.translate(r.width, 0),
                            o.scale(-1, 1),
                            o.rotate(270 * Math.PI / 180),
                            o.drawImage(t, -r.height, 0, r.height, r.width);
                        break;
                    default:
                        o.drawImage(t, 0, 0, r.width, r.height)
                }
                return r
            }))
        }
        function w(t) {
            return fetch(t).then(t => t.blob())
        }
        function m(t) {
            return new Promise((e, n) => {
                const r = new Image;
                r.onload = () => e(r),
                    r.onerror = () => n(new Error("urltoImage(): Image failed to load, please check the image URL")),
                    r.src = t
            })
        }
        var y = function (t, e, n, r) {
            return new (n || (n = Promise))((function (o, i) {
                function a(t) {
                    try {
                        u(r.next(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function c(t) {
                    try {
                        u(r.throw(t))
                    } catch (t) {
                        i(t)
                    }
                }
                function u(t) {
                    var e;
                    t.done ? o(t.value) : (e = t.value, e instanceof n ? e : new n((function (t) {
                        t(e)
                    }))).then(a, c)
                }
                u((r = r.apply(t, e || [])).next())
            }))
        };
        function p(t, e = {}) {
            return y(this, void 0, void 0, (function* () {
                if (!(t instanceof Blob))
                    throw new Error("compress(): First arg must be a Blob object or a File object.");
                if ("object" != typeof e && (e = Object.assign({
                    quality: e
                })), e.quality = Number(e.quality), Number.isNaN(e.quality))
                    return t;
                const n = yield f(t);
                let i = n.split(",")[0].match(/:(.*?);/)[1],
                    c = r.JPEG;
                o(e.type) && (c = e.type, i = e.type);
                const u = yield l(n),
                    d = yield g(u, Object.assign({}, e)),
                    h = yield a(d, e.quality, c),
                    w = yield s(h, i);
                return w.size > t.size ? t : w
            }))
        }
        function b(t, e = {}) {
            return y(this, void 0, void 0, (function* () {
                if (!(t instanceof Blob))
                    throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");
                if ("object" != typeof e && (e = Object.assign({
                    size: e
                })), e.size = Number(e.size), Number.isNaN(e.size))
                    return t;
                if (1024 * e.size > t.size)
                    return t;
                e.accuracy = Number(e.accuracy),
                    (!e.accuracy || e.accuracy < .8 || e.accuracy > .99) && (e.accuracy = .95);
                const n = e.size * (2 - e.accuracy) * 1024,
                    i = 1024 * e.size,
                    c = e.size * e.accuracy * 1024,
                    u = yield f(t);
                let d = u.split(",")[0].match(/:(.*?);/)[1],
                    h = r.JPEG;
                o(e.type) && (h = e.type, d = e.type);
                const w = yield l(u),
                    m = yield g(w, Object.assign({}, e));
                let y,
                    p = .5;
                const b = [null, null];
                for (let t = 1; t <= 7; t++) {
                    y = yield a(m, p, h);
                    const e = .75 * y.length;
                    if (7 === t) {
                        (n < e || c > e) && (y = [y, ...b].filter(t => t).sort((t, e) => Math.abs(.75 * t.length - i) - Math.abs(.75 * e.length - i))[0]);
                        break
                    }
                    if (n < e)
                        b[1] = y,
                            p -= Math.pow(.5, t + 1);
                    else {
                        if (!(c > e))
                            break;
                        b[0] = y,
                            p += Math.pow(.5, t + 1)
                    }
                }
                const v = yield s(y, d);
                return v.size > t.size ? t : v
            }))
        }
    }])
}));

